package com.wyl.mq.publishcomfirm;

import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;

/**
 * 当mq正常时会触发该方法；当mq宕机后，该方法也不会触发。
 * mq明确返回是否成功接收消息
 * @author 吴宇亮 on 2023/6/9 16:51
 */
@Component
public class MyConfirmCallback implements RabbitTemplate.ConfirmCallback {

    /**
     * 交换机不管是否收到消息的一个回调方法
     * CorrelationData 消息相关数据
     * ack 交换机是否收到消息
     * cause 收不到消息的原因
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        String id = "", msg = "";
        if (null != correlationData) {
            id = correlationData.getId();
            msg = new String(correlationData.getReturned().getMessage().getBody(), StandardCharsets.UTF_8);
        }
        if (ack) {
            System.out.println("消息发送成功 id: " + id + ", 内容：" + msg);
        } else {
            System.out.println("消息发送失败 id: " + id + ", 内容：" + msg);
        }
    }
}
